package com.javase.algorithm.leetcode;

import java.util.HashMap;
import java.util.HashSet;

/**
 * @author liyanhao
 * @Date 2022-09-21 17:39
 * 哈希表
 * 字符串
 * 滑动窗口
 */
public class LC03 {

    public static void main(String[] args) {
        LC03 lc03 = new LC03();
        int i = lc03.lengthOfLongestSubstring("abcabcbb");
        System.out.println(i);
    }

    /**
     * @param s
     * @return
     */
    public int lengthOfLongestSubstring(String s) {
        HashSet<Character> set = new HashSet<>();
        int n = s.length();
        int rk = -1;
        int ans = 0;
        for (int i = 0; i < n; i++) {
            if (i != 0) {
                //左指针向右移动一格，移除一个字符
                set.remove(s.charAt(i - 1));
            }
            while (rk + 1 < n && !set.contains(s.charAt(rk + 1))) {
                set.add(s.charAt(rk + 1));
                ++rk;
            }
            //第i到rk个字符是一个极长的无重复的字符子串
            ans = Math.max(ans, rk - i + 1);
        }
        return ans;
    }
}









